home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
t_os
/
tie
/
src
/
lib.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-10-18
|
2KB
|
95 lines
/*
* 一般的な関数
* -------------- -- ---------------------------
* 91/04/14 03:22 01 get_fsize()
* 91/04/26 21:32 02 kstrlen()
* 91/05/27 18:28 03 strdup()
* 91/07/27 04:41 04 trim()
* 91/07/29 18:46 05 access()
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sugi.h"
#define iskanji(c) ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc))
#define iskanji2(c) ((0x40 <= c && c <= 0x7e) || (0x80 <= c && c <= 0xfc))
/* 指定のファイル・ポインタの指すファイルの大きさを返す */
long get_fsize( FILE *fp )
{
long now, fsize ;
now = ftell( fp ) ;
fseek( fp, 0L, SEEK_END ) ;
fsize = ftell( fp ) ;
fseek( fp, now, SEEK_SET ) ;
return( fsize ) ;
}
/* 全角文字も1文字として数えるstrlen */
int kstrlen( u_char *str )
{
u_char *p ;
int len = 0 ;
for( p = str ; *p != '\0' ; p ++, len ++ )
if( iskanji( *p ) && iskanji2( *(p+1) ) )
p ++ ;
return( len ) ;
}
/* コピー先を確保し、文字列をコピーする */
char *strdup( char *str )
{
REGS char *p ;
if( ( p = (char *)malloc( strlen( str )+1 ) ) != NULL )
strcpy( p, str ) ;
return p ;
}
/* 文字列の最後の無駄なスペースを削除する */
u_char *trim( u_char *str )
{
REGS int i ;
for( i = strlen( str ) ; -- i >= 0 ; str[i] = '\0' )
if( str[i] != ' ' )
break ;
return str ;
}
/* ファイルへのアクセスを検査する */
int access( char *path, char *mode )
{
FILE *fp ;
if( ( fp = fopen( path, mode ) ) == NULL )
return ERROR ;
else
fclose( fp ) ;
return ERROR+1 ;
}